PythonとConfluence REST APIを使ってスペース毎の添付ファイル容量を一覧表示する
PythonとConfluenceのREST APIを使って、スペース毎・ページ毎の添付ファイル容量を一覧出力しました。このブログはその備忘録です。
想定読者
- Confluence Cloudで利用している添付ファイル容量を調べたい管理者の方
- ConfluenceでのREST APIの使い方について雰囲気を知りたいPython開発者の方
- 情シスって普段なにしてるか知りたい方
背景
クラスメソッドでは社内WikiとしてConfluece Cloudを利用しています。先日Atlassian社から「ストレージの利用量が80%超過してるよ」というメールが届きました。
Your team has reached 80% of its 250 GB storage limit on Confluence.
プランを "Confluence Cloud Premium" にすればストレージ容量無制限になるようですが、年間コストが倍になってしまいます。
ここはファイルサーバー代わりになっているページをGoogle Driveに移行してもらい、ストレージ容量を減らしてもらいたい。 ただユーザースペースを含めると400以上あるスペースそれぞれの利用量を管理画面から調べるのは大変です。またスペース毎だけでなく、ページ毎の利用量もわかった方が整理する際の参考になりそうです。
管理画面を調べたところ適した画面はなさそうです。そこでサポート窓口に相談したところ、下記の方法を教えていただきました。
圧倒的感謝!ということでさっそく実行してみると、無事スペース毎・ページ毎の添付ファイル数をCSVファイルに出力することができました。
サンプルコードの問題
ただ結果のCSVファイルを見てみるとなにかおかしい。スペース毎の合計をしても200GB(250GBの80%)にはならないし、出力されるスペース数が明らかに少ないです。
これはなにかリミットに引っかかっているな、と思い調べたところ。下記のページを見つけました。
limit integer The maximum number of spaces to return per page. Note, this may be restricted by fixed system limits. Default: 25, Minimum: 0, Format: int32
APIで一度にとってこれるのが25件ずつになってるようですね。これを1万件にしようか考えましたが、今度はAPIの呼び出し制限に引っかかりそうです。 そこでちゃんとページング処理を検討して、25件ずつ取り出して処理するようコードを見直しました。
コード改修
改修後のコードはGitHubにあげています。改修はご自由にどうぞ。なおこのコードを実行したことによる一切の損失の責任は当方では負いません(お約束)。
改修箇所
- ユーザー名、トークン、テナントのベースURLを
.env
ファイルから読み込むようにした。python-dotenv 利用。 - ログ出力を柔軟に変更できるように
logging
モジュールを利用する。pprint
で整形もがんばる。 - APIで一度に取得できる制限25より大きいスペース/ページ/添付ファイル数に対応。
yield
活用。 - カンマを含むページタイトルもGoogleスプレッドシートで読みこめるよう囲み文字をダブルクオーテーションに変更。
社内でのPythonモジュール管理は pipenv
使うのが主流と聞いたのでそれに合わせてます。
まとめ
コード化しておくことで、今後は半年に一度など定期的な棚卸しも楽になりそうです。
CSVファイルは最終的にGoogleスプレッドシートに読み込ませて加工・社内共有するので、Google Colaboratory (Jupyter Notebook as a Service)を使って最初からスプレッドシートに出力させるとより誰でも簡単に状況把握ができそうです。
そうそう、使い終わったAPIトークンはちゃんと消しておかないと。使い終わった環境のお掃除までが保守業務のお仕事です。